/*
 * @Author: wrngygy
 * @Date: 2025-07-01
 * @Description: 路由相关类型定义
 */

import type { RouteRecordRaw } from 'vue-router'

// 扩展路由元信息
export interface RouteMeta {
	// 页面标题
	title?: string
	// 是否需要登录
	requiresAuth?: boolean
	// 需要的权限
	permissions?: string[]
	// 需要的角色
	roles?: string[]
	// 是否在菜单中隐藏
	hidden?: boolean
	// 菜单图标
	icon?: string
	// 是否缓存页面
	keepAlive?: boolean
	// 面包屑导航
	breadcrumb?: boolean
	// 是否固定在标签页
	affix?: boolean
	// 外部链接
	externalLink?: string
	// 重定向地址
	redirect?: string
	// 排序
	sort?: number
}

// 扩展路由记录
export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta' | 'children'> {
	meta?: RouteMeta
	children?: AppRouteRecordRaw[]
}

// 菜单项接口
export interface MenuItem {
	id: string
	title: string
	path: string
	icon?: string
	children?: MenuItem[]
	hidden?: boolean
	sort?: number
	permission?: string
	externalLink?: string
}

// 路由守卫类型
export type NavigationGuardNext = (to?: any) => void

// 路由守卫返回值类型
export type NavigationGuardReturn = void | Error | boolean | string | object
